js new 函数名 和 函数名()调用函数的区别 |
您所在的位置:网站首页 › js 函数名不确定的调用 › js new 函数名 和 函数名()调用函数的区别 |
若不使用new 函数名 方式调用函数,则就是普通的函数调用;若函数中没有返回值,则普通的函数调用将毫无意义; 简要事例如下: var person = new Person(); // person的值为一个对象 但是: var person = Person (); // 若Person函数无返回值,则person的值为undefined 具体事例如下: 函数没有用return返回信息【事例一】 function Person (name, age) { this.name = name; this.age = age; this.sayName = function () { this.alert(this.name); } } // 此时为构造函数,产生的person对象是由解析器产生的 var person = new Person(lily, 22); var person1 = Person(lucy, 24); person.sayName(); // 此时会弹出弹框lily person1.sayName(); // person1的值为undefined(因为函数本身没有return语句),故此时将会报错 此时的sayName是由window调用的; 修改如下: window.sayName(); // lucy sayName可用window调用的原因:当Person(lucy, 24)执行时,该方法的对象变成了window。this指向了 window;故可以用window对象调用该方法 函数用return返回了信息: 如果函数返回的是基本数据类型(Number、string,Boolean等)时,new函数将返回一个该函数的实例对象; 而如果函数返回一个引用类型(Object, array, function)时,new函数与直接嗲用函数产生的结果相同 事例二:(返回基本数据类型) function Test () { this.name = 'test' return 'test' } var test = new Test(); //test为object对象,该对象包含一个name属性和返回了一个test var test1 = Test(); //Test()属于一个fuction对象,它只返回了一个字符串test,故test1为 test字符串事例三:(返回引用数据类型) function Person(name,age) { var o = new Object(); o.name = name; o.age = age; o.getName = function() { alert(this.name); } return o; } var obj1 = new Person("liwen",25); var obj2 = Person("liwen1",25); obj1.getName(); //liwen*/ new一个函数的实例对象 obj2.getName(); //liwen1*/ 直接调用 //这里new一个函数的对象和直接调用函数产生的结果相同总结: 构造函数不需要显示返回值。 使用new创建对象(调用构造函数)时,若return的是基本数据类型回忽略返回值; 若return 的是对象,则返回该对象; javascript中new对象的过程: 如: var myObj = newPerson(“aty”,25); 1.创建一个空的Object对象.var myObj = new Object(); 2.将构造函数Person中this指向刚创建的myObj对象 3.将创建的myObj的__proto__指向构造函数Person的prototype。[这一步是建立对象和原型直接的对应关系。firefox下通过 对象的__proto__属性能够访问到原型,IE下则没有暴露出相应的属性。] 4.执行构造函数Person()中的代码 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |